package com.chinaedu.oc.serv.product;

import com.chinaedu.oc.po.dto.PubOutputDto;
import com.chinaedu.oc.po.productline.ProductLine;
import com.chinaedu.oc.po.productline.ProductLineKey;
import com.chinaedu.oc.po.productline.dto.AddProductLineInput;
import com.chinaedu.oc.po.productline.dto.AddProductLineOutput;
import com.chinaedu.oc.po.productline.dto.ConfigProductLineKeyInput;
import com.chinaedu.oc.po.productline.dto.ConfigProductLineKeyOutput;
import com.chinaedu.oc.po.productline.dto.CreateProductLineKeyOutput;
import com.chinaedu.oc.po.productline.dto.QueryIsCanStartUseInput;
import com.chinaedu.oc.po.productline.dto.QueryIsCanStartUseOutput;
import com.chinaedu.oc.po.productline.dto.QueryProductLineInput;
import com.chinaedu.oc.po.productline.dto.QueryProductLineOutput;
import com.chinaedu.oc.po.productline.dto.StartUseProductLineInput;
import com.chinaedu.oc.util.annotation.Master;
import com.chinaedu.oc.util.annotation.Slaver;
import com.chinaedu.oc.util.common.CheckParamException;

/**
 * 产品线接口
 * @Description: TODO
 * @author A18ccms a18ccms_gmail_com 
 * @date 2017年5月9日 下午2:13:18 
 *
 */

public interface IProductLine {
	/**
	 * 添加/更新产品线
	 * @Description: TODO
	 * @param @param input
	 * @param @return
	 * @param @throws CheckParamException    
	 * @return AddProductLineOutput    返回类型 
	 * @throws
	 */
	@Master
	AddProductLineOutput addOrUpdateProductLine(AddProductLineInput input) throws CheckParamException;
	/**
	 * 查询产品线
	 * @Description: TODO
	 * @param @param input
	 * @param @return    
	 * @return QueryProductLineOutput    返回类型 
	 * @throws
	 */
	@Slaver
	QueryProductLineOutput queryProductLine(QueryProductLineInput input);
	/**
	 * 启用产品线
	 * @Description: TODO
	 * @param @param input
	 * @param @return    
	 * @return PubOutputDto    返回类型 
	 * @throws
	 */
	@Master
	PubOutputDto startUseProductLine(StartUseProductLineInput input);
	/**
	 * 配置产品线秘钥
	 * @Description: TODO
	 * @param @param input
	 * @param @return
	 * @param @throws CheckParamException    
	 * @return PubOutputDto    返回类型 
	 * @throws
	 */
	@Master
	PubOutputDto configProductLineKey(ConfigProductLineKeyInput input) throws CheckParamException;
	/**
	 * 创建产品线秘钥
	 * @Description: TODO
	 * @param @return    
	 * @return CreateProductLineKeyOutput    返回类型 
	 * @throws
	 */
	@Master
	CreateProductLineKeyOutput createProductLineKey();
	/**
	 * 根据编码查询产品线
	 * @Description: TODO
	 * @param @param code
	 * @param @return    
	 * @return ProductLineKey    返回类型 
	 * @throws
	 */
	@Slaver
	ProductLineKey queryKeyByProductLineCode(String code);	
	/**
	 * 根据编码查询产品线
	 * @Description: TODO
	 * @param @param code
	 * @param @return    
	 * @return ProductLine    返回类型 
	 * @throws
	 */
	@Slaver
	ProductLine queryByCode(String code);
	/**
	 * 根据产品线id查询秘钥
	 * @Description: TODO
	 * @param @param id
	 * @param @return    
	 * @return ConfigProductLineKeyOutput    返回类型 
	 * @throws
	 */
	@Slaver
	ConfigProductLineKeyOutput queryKeyByProductLineId(String id);	
}
